//
//  RowImagesBaseM.m
//  
//  jhf
//
//  Created by Mac on 2020/8/13.
//

#import "RowImagesBaseM.h"

@implementation RowImagesBaseM

/// 返回默认控制器
/// @param imagesControls 对应的图片控制器
/// @param maxWidth 最大宽度
/// @param columns 默认0 排满换行
+ (RowImagesBaseM *)defaultControls:(NSArray <ImageControlM *>*)imagesControls maxWidth:(CGFloat)maxWidth numerOfColumn:(NSInteger)columns {
    RowImagesBaseM *rowImageC = [[RowImagesBaseM alloc] init];
    rowImageC.currentIdx = 0;
    rowImageC.method = @"imageCellTap";
    rowImageC.imagesControls = imagesControls;
    rowImageC.numerOfColumn = columns > 0 ? columns : 0;
    
    
    NSArray *array = imagesControls;
    __block NSInteger currentNumerOfColumn = 0;
    __block CGFloat leftCons = 0.f; // 左侧边距
    __block CGFloat topMaxCons = 0.f;  // 顶部距离 最大
    __block CGFloat heightMaxCons = 0.f; // 本行最高的按钮
    __block CGFloat floorHeightCons = 0.f; //上次顶部高度
    [array enumerateObjectsUsingBlock:^(ImageControlM *  _Nonnull config, NSUInteger idx, BOOL * _Nonnull stop) {
        // 排放位置
        // 左侧边距
        leftCons += config.vLeftCons;
        CGRect frame = CGRectMake(leftCons, config.vTopCons + floorHeightCons, config.vWidthCons, config.vHeightCons);
        // 顶部距离 最大
        topMaxCons = MAX(topMaxCons, config.vTopCons);
        //最高的img
        heightMaxCons = MAX(config.vHeightCons, heightMaxCons);
        BOOL needNextLine = (leftCons + config.vWidthCons + config.vLeftCons) - 1 > maxWidth && idx > 0;  // 这一行排列不下 并且不是第一个 需要换行
        if (rowImageC.numerOfColumn > 0 && currentNumerOfColumn > 0 && currentNumerOfColumn >= rowImageC.numerOfColumn) { // 超过指定行的数量控制
            needNextLine = true;
        }
        // 当前行 数量+1
        currentNumerOfColumn += 1;
        if (needNextLine) {
            // 当前行 数量归0
            currentNumerOfColumn = 0;
            // 左侧边距+要添加按钮 大于背景宽度 且不是第一个 需要换行
            leftCons = config.vLeftCons;
            floorHeightCons = floorHeightCons + topMaxCons + heightMaxCons;
            frame = CGRectMake(leftCons, floorHeightCons + config.vTopCons, config.vWidthCons, config.vHeightCons);
            //设置新的 最高边距和最高按钮高度<新的一行 第一个>
            topMaxCons = config.vTopCons;
            heightMaxCons = config.vHeightCons;
        }
        // 设置frame后 增加 左侧宽度到 按钮的右侧
        leftCons += config.vWidthCons;
        // 更新按钮 frame
        config.frame = frame;
        
        if (idx == array.count - 1) {
            /// 最后一个判断cell的高度刷新
            CGFloat ideaCellHeight = floorHeightCons + (topMaxCons == 0 ? (config.vHeightCons + config.vTopCons) : (topMaxCons + heightMaxCons))  + config.vBottomCons;
            
            rowImageC.cellHeight = ideaCellHeight;
            
//            if (bind.cellHeight < ideaCellHeight - 0.1) {
//                bind.cellHeight = ideaCellHeight;
//                [bind.action runService:RefreshRowHeight any:bind.action.key];
//            };
        }
        
    }];
    
    return rowImageC;
}

@end
